/*
    SWC
        语法转换器
        SWC 既可用于编译也可用于打包, Babel 只能用于编译
        SWC在单线程上比 Babel 快 20 倍，在四核上快 70 倍
        SWC 是用 Rust 编写的，Rust 是一种编译型语言，在编译时将代码转化为机器码（底层的 CPU 指令）。这种机器码在执行时非常高效，几乎不需要额外的开销
        将ES6+语法转换为ES5语法
        将JSX语法转换为JS语法
        SWC 支持代码压缩和优化功能，类似于 Terser
        SWC 原生支持 TypeScript
        
        原理： 将我们的代码转换（transform  ===> traverse）成 AST（抽象语法树），然后根据 AST 生成（generator）新的代码
    安装 npm install --save-dev @swc/core  使用阿里镜像 --registry http://registry.npmmirror.com
    cd 进入 public/swc, 使用 node 启动 index.js
*/
import swc from '@swc/core';   // swc

// const result = swc.transformFileSync('./test.js', {      // 用transformFileSync这个方法， 第二个参数的配置，需要一个jsc
const result = swc.transformFileSync('./app.jsx', {      // 解析jsx,直接在里面配置 jsx: true
    jsc: {
        parser: {
            syntax: 'ecmascript',  // javascript语法
            jsx: true,             // 是否支持JSX语法
            // syntax: 'typescript',  // 语法类型typeScript
            // tsx: true,             // 是否支持TSX语法
            // decorators: true,      // 是否支持装饰器语法
        },
        // target: 'es2015',         // 转换的目标版本
        target: 'es5',         // 转换的目标版本
    }
})

console.log(result.code);
